home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Visual Basic Source Code
/
Visual Basic Source Code.iso
/
vbsource
/
optivc32
/
vcdstd.h
< prev
next >
Wrap
C/C++ Source or Header
|
1999-03-06
|
8KB
|
189 lines
/* VCDstd.h
vector management functions:
manipulations on whole arrays or vectors of data type dComplex
(double-precision complex numbers)
Copyright (c) 1996-1999 by Martin Sander
All Rights Reserved.
*/
#ifndef __VCDSTD_H
#define __VCDSTD_H
#if !defined( __VECLIB_H )
#include <VecLib.h>
#endif
#ifdef __cplusplus
extern "C" {
#endif
/************************* Generation **************************/
cdVector __vf VCD_vector( ui size );
cdVector __vf VCD_vector0( ui size );
/*************** Addressing single vector elements ******************/
dComplex _VFAR * VCD_Pelement( cdVector X, ui n );
/* returns a pointer to the n'th element of X. For the memory model
HUGE, the pointer is normalized. */
#define VCD_element( X, n ) (*VCD_Pelement( X, n ))
/******************* Initialization **********************************/
void __vf VCD_equ0( cdVector X, ui size );
void __vf VCD_equ1( cdVector X, ui size );
void __vf VCD_equC( cdVector X, ui size, dComplex C );
void __vf VCD_equV( cdVector Y, cdVector X, ui size );
void __vf VCDx_equV( cdVector Y, cdVector X, ui size,
dComplex A, dComplex B );
void __vf VCD_ramp( cdVector X, ui size, dComplex Start, dComplex Rise );
void __vf VD_CtoReIm( dVector Re, dVector Im, cdVector X, ui size );
void __vf VD_ReImtoC( cdVector Y, dVector Re, dVector Im, ui size );
void __vf VD_CtoRe( dVector Re, cdVector X, ui size );
void __vf VD_RetoC( cdVector Y, dVector Re, ui size );
void __vf VD_CtoIm( dVector Im, cdVector X, ui size );
void __vf VD_ImtoC( cdVector Y, dVector Im, ui size );
void __vf VD_CtoPolar( dVector Mag, dVector Arg, cdVector X, ui size );
void __vf VD_PolartoC( cdVector Y, dVector Mag, dVector Arg, ui size );
void __vf VD_CtoNorm( dVector Norm, cdVector X, ui size );
void __vf VD_CtoAbs( dVector Abs, cdVector X, ui size );
void __vf VD_CtoArg( dVector Arg, cdVector X, ui size );
int __vf VCD_abs( dVector Y, cdVector X, ui size );
#define VCD_real( Y, X, sz ) VD_CtoRe( Y, X, sz )
#define VCD_imag( Y, X, sz ) VD_CtoIm( Y, X, sz )
#define VCD_arg( Y, X, sz ) VD_CtoArg( Y, X, sz )
#define VCD_norm( Y, X, sz ) VD_CtoNorm( Y, X, sz )
#define VCD_polar( Y, Mag, Arg, sz ) VD_PolartoC( Y, Mag, Arg, sz )
#define VCD_complex( Y, Re, Im, sz ) VD_ReImtoC( Y, Re, Im, sz )
/**************** Data-type interconversions ***************************/
void __vf V_CFtoCD( cdVector Y, cfVector X, ui size );
void __vf V_CDtoCF( cfVector Y, cdVector X, ui size );
#ifdef __BORLANDC__ /* 80-bit IEEE numbers supported */
void __vf V_CDtoCE( ceVector Y, cdVector X, ui size );
void __vf V_CEtoCD( cdVector Y, ceVector X, ui size );
#else /* no IEEE number support with other compilers */
#define V_CDtoCE VCD_equV
#define V_CEtoCD VCD_equV
#endif
/**************** Index-oriented manipulations ***********************/
void __vf VCD_reflect( cdVector X, ui size );
void __vf VCD_delete( cdVector X, ui size, ui pos );
void __vf VCD_insert( cdVector X, ui size, ui pos, dComplex C );
void __vf VCD_rev( cdVector Y, cdVector X, ui size );
#ifdef V_HUGE
void __vf VCD_rotate( cdVector Y, cdVector X, ui size, long pos );
#else
void __vf VCD_rotate( cdVector Y, cdVector X, ui size, int pos );
#endif
void __vf VCD_indpick( cdVector Y, uiVector Ind, ui sizey, cdVector X );
void __vf VCD_indput( cdVector Y, cdVector X, uiVector Ind, ui sizex );
void __vf VCD_subvector( cdVector Y, ui sizey, cdVector X, int step );
/***************** Functions of a sub-set of elements ********************/
void __vf VCD_subvector_equC( cdVector Y, ui subsiz, unsigned samp,
dComplex C );
void __vf VCD_subvector_equV( cdVector Y, ui subsiz, unsigned samp,
cdVector X );
/* for arithmetic functions of subsets, see <VCDmath.h> */
/**************** One-Dimensional Vector Operations ***********************/
double __vf VCD_absmax( cdVector X, ui size );
double __vf VCD_absmin( cdVector X, ui size );
double __vf VCD_absmaxind( ui _VFAR *pos, cdVector X, ui size );
double __vf VCD_absminind( ui _VFAR *pos, cdVector X, ui size );
#if defined __cplusplus && defined _CMATH_CLASSDEFS
} // the following functions cannot be extern "C", if dComplex is a class
#endif
dComplex __vf VCD_maxReIm( cdVector X, ui size );
dComplex __vf VCD_minReIm( cdVector X, ui size );
dComplex __vf VCD_absmaxReIm( cdVector X, ui size );
dComplex __vf VCD_absminReIm( cdVector X, ui size );
dComplex __vf VCD_sum( cdVector X, ui size );
dComplex __vf VCD_prod( cdVector X, ui size );
dComplex __vf VCD_mean( cdVector X, ui size );
dComplex __vf VCD_meanwW( cdVector X, dVector Wt, ui size );
#if defined __cplusplus && defined _CMATH_CLASSDEFS
extern "C" {
#endif
void __vf VCD_runsum( cdVector Y, cdVector X, ui size );
void __vf VCD_runprod( cdVector Y, cdVector X, ui size );
int __vf VCD_iselementC( cdVector Tab, ui size, dComplex C );
ui __vf VCD_iselementV( cdVector Y, cdVector X, ui sizex,
cdVector Tab, ui sizetab );
/********* Fourier Transforms, Convolutions, Filtering ****************/
void __vf VCDl_FFT( cdVector Y, cdVector X, ui size, int dir );
void __vf VCDl_filter( cdVector Y, cdVector X, cdVector Flt, ui size );
void __vf VCDs_FFT( cdVector Y, cdVector X, ui size, int dir );
void __vf VCDs_filter( cdVector Y, cdVector X, cdVector Flt, ui size );
#if( defined( __LARGE__ ) || defined( __COMPACT__ ) )
#define VCD_FFT VCDl_FFT
#define VCD_filter VCDl_filter
#else
#define VCD_FFT VCDs_FFT
#define VCD_filter VCDs_filter
#endif
/*************************** Input and Output *****************************/
void __vf VCD_fprint( FILE _VFAR *stream, cdVector X, ui size,
unsigned nperline, unsigned linewidth );
#if !defined _Windows || defined __FLAT__ || defined _WIN32
void __vf VCD_cprint( cdVector X, ui size, unsigned nperline );
#endif
#define VCD_print( X, sz, npl ) VCD_fprint( stdout, X, sz, npl, 80 )
/* VCD_print, VCD_cprint usable only for DOS and Win32 console applications! */
void __vf VCD_write( FILE _VFAR *stream, cdVector X, ui size );
void __vf VCD_read( cdVector X, ui size, FILE _VFAR *stream );
void __vf VCD_nwrite( FILE _VFAR *stream, unsigned n, ui size, ... );
void __vf VCD_nread( unsigned n, ui size, FILE _VFAR *stream, ... );
void __vf VCD_setWriteFormat( char _VFAR *FormatString );
/* for VCD_write and VCD_nwrite */
void __vf VCD_setWriteSeparate( char _VFAR *SepString ); /* for VCD_write */
void __vf VCD_setNWriteSeparate( char _VFAR *SepString ); /* for VCD_nwrite */
#ifdef V_HUGE
void __vf VCD_store( FILE _VFAR *stream, cdVector X, ui size );
void __vf VCD_recall( cdVector X, ui size, FILE _VFAR *stream );
#else
#ifdef __cplusplus
void inline VCD_store( FILE _VFAR *stream, cdVector X, ui size )
{ fwrite( X, sizeof(dComplex), size, stream );
}
void inline VCD_recall( cdVector X, ui size, FILE _VFAR *stream )
{ fread( X, sizeof(dComplex), size, stream );
}
#else
#define VCD_store( str, X, sz ) \
fwrite( X, sizeof(dComplex), sz, str )
#define VCD_recall( X, sz, str ) \
fread( X, sizeof(dComplex), sz, str )
#endif
#endif /* VCD_store, VCD_recall in binary format */
#ifdef __cplusplus
}
#endif
#endif /* __VCDSTD_H */